#!/usr/bin/make -f

# Basic package information.
package := $(shell grep Source debian/control | sed 's/^Source: //')
date	:= $(shell date +"%Y-%m-%d")
version := $(shell dpkg-parsechangelog | awk '/^Version:/ { print $$2; exit }')

# Currently, emacs23 is required (xemacs is not sufficient).
EMACS   := emacs24

# Location of the source and build directories.
SRCTOP	:= $(CURDIR)
TMPTOP	:= $(SRCTOP)/debian/tmp
DOCDIR	:= $(TMPTOP)/usr/share/doc/$(package)
LIBDIR	:= $(TMPTOP)/usr/share/doc-base

# SGML source files in the top-level directory.  We do some common actions
# with each of these: validate, build text, HTML, and one-page HTML output,
# and generate a tarball of the source.
SGML_FILES  := policy menu-policy perl-policy upgrading-checklist

# org-mode source files in the top-level directory.  We generate text and
# HTML versions from these.
ORG_FILES   := Process README

# doc-base description files for the documents we include.
DESC_FILES  := copyright-format-1.0 debian-policy debian-menu-policy \
	       debian-perl-policy debconf-spec fhs autopkgtest

# Our local copy of the File Hierarchy Standard.  We don't build this from
# source, but we do have a copy of the source in FHS_ARCHIVE.
FHS_ARCHIVE := fhs-2.3-source.tar.gz
FHS_FILES   := fhs-2.3.html fhs-2.3.ps.gz fhs-2.3.txt.gz fhs-2.3.pdf.gz

# A list of the simple Policy files that we include in the documentation
# directory of the generated package.  The tarballs of source are handled
# separately, as are the directories of HTML output.
POLICY_FILES := $(SGML_FILES:=.sgml) $(SGML_FILES:=.txt.gz)		\
		$(SGML_FILES:=-1.html) version.ent			\
		virtual-package-names-list.txt	                        \
		copyright-format/copyright-format-1.0.html		\
		copyright-format/copyright-format-1.0.txt.gz		\
		autopkgtest/autopkgtest.html				\
		autopkgtest/autopkgtest.txt.gz				\
		debconf_spec/debconf_specification.html			\
		debconf_spec/debconf_specification.txt.gz		\
		policy.ps.gz policy.pdf.gz README.txt README.html	\
		Process.txt Process.html

# Used by the clean rules.  STAMPS_TO_CLEAN are the stamp files used to tell
# make that a target has completed, and are removed first.  FILES_TO_CLEAN
# are individual generated files to remove.  DIRS_TO_CLEAN are entire
# directories to remove.
STAMPS_TO_CLEAN := stamp-binary stamp-build
DIRS_TO_CLEAN   := $(SGML_FILES:=.html) debian/tmp fhs
FILES_TO_CLEAN	:= $(SGML_FILES:=.txt) $(SGML_FILES:=.txt.gz)		\
		   $(SGML_FILES:=.html.tar.gz) $(SGML_FILES:=-1.html)	\
		   $(ORG_FILES:=.html) $(ORG_FILES:=.txt)		\
		   policy.pdf.gz policy.ps.gz				\
		   policy.pdf policy.ps policy.tpt policy.txt		\
		   copyright-format/version.xml				\
		   autopkgtest/version.txt				\
		   debconf_spec/include/version.xml version.ent		\
		   copyright-format.xml.tar.gz				\
		   debconf_specification.xml.tar.gz			\
		   debian/files

# Install files and directories with the correct ownership and permissions.
install := install -p -o root -g root -m 644
mkdir   := install -d -o root -g root -m 755


all build build-indep: stamp-build
build-arch:
stamp-build: version.ent copyright-format/version.xml \
	     autopkgtest/version.txt \
	     debconf_spec/include/version.xml
	$(MAKE) $(SGML_FILES:=.sgml.validate) \
		$(SGML_FILES:=.html.tar.gz) \
                $(SGML_FILES:=-1.html) \
		$(SGML_FILES:=.txt.gz) \
		policy.ps.gz policy.pdf.gz
	$(MAKE) $(ORG_FILES:=.html) \
		$(ORG_FILES:=.txt)
	$(MAKE) -C copyright-format all
	$(MAKE) -C autopkgtest all
	$(MAKE) -C debconf_spec all
	cd copyright-format && \
		GZIP=-n9 tar -zcf ../copyright-format.xml.tar.gz *
	cd debconf_spec && \
		GZIP=-n9 tar -zcf ../debconf_specification.xml.tar.gz *
	touch stamp-build

# Create the version files for inclusion in the various documents.  We want
# to put the Policy version and date in each document, even if they
# separately have their own versions.
configure: version.ent copyright-format/version.xml \
	   autopkgtest/version.txt \
	   debconf_spec/include/version.xml
version.ent: debian/changelog
	rm -f $@
	echo "<!entity version \"$(version)\">" >> $@
	echo "<!entity date    \"$(date)\">"	>> $@
copyright-format/version.xml: debian/changelog
	rm -f $@
	echo '<?xml version="1.0" standalone="no"?>' >  $@
	echo '<!ENTITY version "$(version)">'        >> $@
	echo '<!ENTITY date    "$(date)">'           >> $@
debconf_spec/include/version.xml: debian/changelog
	rm -f $@
	echo '<?xml version="1.0" standalone="no"?>' >  $@
	echo '<!ENTITY version "$(version)">'        >> $@
	echo '<!ENTITY date    "$(date)">'           >> $@
autopkgtest/version.txt: debian/changelog
	rm -f $@
	echo                                     > $@
	echo '---'                               >> $@
	echo 'Debian Policy $(version), $(date)' >> $@

clean:
	rm -f $(STAMPS_TO_CLEAN)
	$(MAKE) -C copyright-format clean
	$(MAKE) -C autopkgtest clean
	$(MAKE) -C debconf_spec clean
	rm -f $(FILES_TO_CLEAN)
	rm -rf $(DIRS_TO_CLEAN)
	rm -f core `find . \( -name '*.orig' -o -name '*.rej' -o	\
	  -name '*~' -o -name '*.bak' -o -name '#*#' -o			\
	  -name '.*.orig' -o -name '.*.rej' -o -name '.SUMS' -o		\
	  -size 0 \) -print` TAGS


binary: binary-indep binary-arch
binary-arch:
binary-indep: stamp-binary
stamp-binary: stamp-build
	@test $$(id | sed -e 's/(.*$$//' -e 's/^uid=//') -eq 0 || \
	    (echo 'You must run this as root (or use fakeroot)' >&2; exit 1)
	rm -rf		$(TMPTOP)
	$(mkdir)	$(TMPTOP)/DEBIAN
	$(mkdir)	$(DOCDIR)/fhs
	$(mkdir)	$(LIBDIR)
#
# Install simple files.
#
	$(install)	$(POLICY_FILES)		$(DOCDIR)/
	$(install)	$(FHS_FILES)		$(DOCDIR)/fhs/
	$(install)	debian/changelog	$(DOCDIR)/
	$(install)	debian/copyright	$(DOCDIR)/
#
# Install DocBook XML source.
#
	$(install)	copyright-format.xml.tar.gz		$(DOCDIR)/
	$(install)	debconf_specification.xml.tar.gz	$(DOCDIR)/
#
# Install generated HTML directories.
#
	@set -ex; for file in $(SGML_FILES); do			\
		tar -C $(DOCDIR) -zxf $$file.html.tar.gz;	\
	done
#
# Make upgrading-checklist-1.html a symlink to the copy in the policy.html
# directory.  This is temporary until it becomes a proper appendix.
#
	rm -f $(DOCDIR)/upgrading-checklist-1.html
	ln -s policy.html/upgrading-checklist.html \
		$(DOCDIR)/upgrading-checklist-1.html
#
# Install doc-base files.
#
	@set -ex; for file in $(DESC_FILES); do			\
		$(install) $$file.desc $(LIBDIR)/$$file;	\
	done
#
# Compress files and build MD5 checksums.
#
	gzip -f9 $(DOCDIR)/*.sgml $(DOCDIR)/changelog
	gzip -f9 -n $(DOCDIR)/*.txt
	@set -ex; cd debian/tmp; \
	find . -path './DEBIAN' -prune -o -type f -printf '%P\0' \
		| xargs -r0 md5sum > DEBIAN/md5sums
#
# Build the package.
#
	dpkg-gencontrol -p$(package) -Pdebian/tmp
	chown -R root:root debian/tmp
	chmod -R go=rX debian/tmp
	dpkg --build debian/tmp ..
	touch stamp-binary


.PHONY: all configure build build-arch build-indep binary binary-arch
.PHONY: binary-indep clean
